package ar.com.digitalbricks.imprenta.cliente.impl;

import java.util.Collection;
import java.util.HashSet;

import ar.com.digitalbricks.fwk.impl.PersistentImpl;
import ar.com.digitalbricks.imprenta.cliente.Archivo;
import ar.com.digitalbricks.imprenta.cliente.Cliente;
import ar.com.digitalbricks.imprenta.cliente.dao.ClienteDAO;
import ar.com.digitalbricks.imprenta.cliente.enums.TipoIva;
import ar.com.digitalbricks.imprenta.general.enums.Dia;
import ar.com.digitalbricks.imprenta.persona.Contacto;

public class ClienteImpl extends PersistentImpl  implements Cliente {
	private String razonSocial;
	private String cuit;
	private String direccion;
	private TipoIva tipoIva;
	private String mail;
	private Integer numeroCarpeta;
	private Collection<Archivo> archivos;
	private Collection<Contacto> contactos;
	private Collection<Dia> diasDePago;

	private static ClienteDAO clienteDAO;

	public ClienteImpl() {}
	
	public ClienteImpl(Cliente cliente) {
		this.razonSocial = cliente.getRazonSocial();
		this.cuit = cliente.getCuit();
		this.direccion = cliente.getDireccion();
		this.tipoIva = cliente.getTipoIva();
		this.mail = cliente.getMail();
		this.numeroCarpeta = cliente.getNumeroCarpeta();
		for (Archivo archivo : cliente.getArchivos()) {
			this.getArchivos().add(archivo);
		}
		for (Contacto contacto: cliente.getContactos()) {
			this.getContactos().add(contacto);
		}
		for (Dia dia: cliente.getDiasDePago()) {
			this.getDiasDePago().add(dia);
		}
	}

	@Override
	public void delete() {
		this.getClienteDAO().delete(this);
	}

	@Override
	public void save() {
		this.getClienteDAO().save(this);
	}

	@Override
	public String getRazonSocial() {
		return this.razonSocial;
	}

	@Override
	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}

	@Override
	public String getCuit() {
		return this.cuit;
	}

	@Override
	public void setCuit(String cuit) {
		this.cuit = cuit;
	}

	@Override
	public String getDireccion() {
		return this.direccion;
	}

	@Override
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}


	@Override
	public TipoIva getTipoIva() {
		return this.tipoIva;
	}

	@Override
	public void setTipoIva(TipoIva tipoIva) {
		this.tipoIva = tipoIva;
	}

	@Override
	public String getMail() {
		return this.mail;
	}

	@Override
	public void setMail(String mail) {
		this.mail = mail;
	}
	
	@Override
	public Integer getNumeroCarpeta() {
		return this.numeroCarpeta;
	}
	
	@Override
	public void setNumeroCarpeta(Integer numeroCarpeta) {
		this.numeroCarpeta = numeroCarpeta;
	}

	public ClienteDAO getClienteDAO() {
		return clienteDAO;
	}

	public void setClienteDAO(ClienteDAO clienteDAO) {
		ClienteImpl.clienteDAO = clienteDAO;
	}

	public void setArchivos(Collection<Archivo> archivos) {
		this.archivos = archivos;
	}

	protected void setContactos(Collection<Contacto> contactos) {
		this.contactos = contactos;
	}

	@Override
	public void addArchivo(Archivo archivo) {
		this.getArchivos().add(archivo);
	}
	
	@Override
	public Collection<Archivo> getArchivos() {
		if (this.archivos == null){
			this.archivos = new HashSet<Archivo>();
		}
		return this.archivos;
	}
	
	@Override
	public void addContacto(Contacto contacto){
		this.getContactos().add(contacto);
	}

	@Override
	public Collection<Contacto> getContactos() {
		if (this.contactos == null){
			this.setContactos(new HashSet<Contacto>());
		}
		return this.contactos;
	}

	@Override
	public Collection<Dia> getDiasDePago() {
		if (this.diasDePago == null){
			this.diasDePago = new HashSet<Dia>();
		}
		return this.diasDePago;
	}

	public void setDiasDePago(Collection<Dia> diasDePago) {
		this.diasDePago = diasDePago;
	}

	@Override
	public void addDiaDePago(Dia diaDePago) {
		this.getDiasDePago().add(diaDePago);
	}
}